//COPIAR ESTAS LINEAS DE CODIGO*************************************************************************************
//texto a sustituir cuando no cumple el standar
var textoAnterior = "";
var region = "2", separador = "", decimal = ""; //TENER EN CUENTA QUE REGION ES UN DATO QUE SE TOMARA AL MOMENTO DE CARGAR LA PAGINA
//texto a sustituir cuando no cumple el standar
var cursorInicio, cursorFin, tamanio;

//*********************************************************************************
$(document).ready(function(){
	$("#importe").keyup(function(){
		cursorInicio = $(this).caret().start;
		cursorFin = $(this).caret().end;
	
		if (navigator.appName == "Microsoft Internet Explorer") {
			if(event.keyCode == 37 || event.keyCode == 38){
				return true;
			}
			else{
				evaluaValor($(this))
			}
		}
		else{
			evaluaValor($(this))
		}
		
		$("span.caretStart").text($(this).val().length)
		$("span.caretEnd").text(cursorFin)
		$("span.diferencia").text($(this).val().length - cursorFin)
		
		if(($(this).val().length - cursorFin) > 1)
			$(this).val($(this).val()).caret({start:cursorInicio,end:cursorFin})
	});
	
	$("#importe").change(function(){
		cursorInicio = $(this).caret().start;
		cursorFin = $(this).caret().end;
	
		evaluaValor($(this))
		
		$("span.caretStart").text($(this).val().length)
		$("span.caretEnd").text(cursorFin)
		$("span.diferencia").text($(this).val().length - cursorFin)
		
		if(($(this).val().length - cursorFin) > 1)
			$(this).val($(this).val()).caret({start:cursorInicio,end:cursorFin})
	});
	
	$("#importe").keypress(function(){
		cursorInicio = $(this).caret().start;
		cursorFin = $(this).caret().end;
		
		if (navigator.appName == "Microsoft Internet Explorer") {
			if(event.keyCode == 37 || event.keyCode == 38){
				return true;
			}
			else{
				evaluaValor($(this))
			}
		}
		else{
			evaluaValor($(this))
		}
		
		$("span.caretStart").text($(this).val().length)
		$("span.caretEnd").text(cursorFin)
		$("span.diferencia").text($(this).val().length - cursorFin)
		
		if(($(this).val().length - cursorFin) > 1)
			$(this).val($(this).val()).caret({start:cursorInicio,end:cursorFin})
	});
});

//REFERENTE A LA REGION**********************************************
if(region == "1"){
	separador = ",";
	decimal = ".";
}//else{

if(region == "2"){
	separador = ".";
	decimal = ",";
}

//Funcion que establece si el valor es valido o no*******************
function cumpleStandar(valor){
	//Se establece la expresion regular de importe
	var expresion = new RegExp("^(|([0-9]{1,50}(\\"+ decimal +"([0-9]{1,2})?)?))$");
	
	//se valida el valor recibido con la expresion regular de importe
	if(expresion.test(valor))
		return true;
		
	return false;
 }

//Funcion que obtine el valor y lo envia a validacion******************
function evaluaValor(campo){
	var valor, decimales, band = 0, fraccion, enteros;

	//si comienza con una coma, se agrega un cero
	if(campo.val().substring(0,1) == decimal){ 
		campo.val("0" + campo.val());
	}else{
		if(campo.val().indexOf(decimal) < 0){
			separadorMiles(campo)
		}
		else{
			separadorMiles(campo)
		
			if(decimal == ","){
				//Registrar cuantas veces se encuentra el separador decimal en la cadena
				var contar = 0;
				var matches = campo.val().match(/\,/g);
				if (matches) 
					contar = matches.length;
				//-----------------------------------------------------------------------
				//Si se encuentra mas de una vez borrar de lo contrario separar----------
				if(contar <= 1){
					valor = campo.val().toString().split(",");
				}else{
					campo.val(campo.val().replace(/^\,|\,$/g,""));
					
					valor = campo.val().toString().split(",");
				}
				//------------------------------------------------------------------------
			}//else 
			
			if(decimal == "."){
				//Registrar cuantas veces se encuentra el separador decimal en la cadena
				var contar = 0;
				var matches = campo.val().match(/\./g);
				if (matches) {
					contar = matches.length;
				}
				
				//-----------------------------------------------------------------------
				//Si se encuentra mas de una vez borrar de lo contrario separar----------
				if(contar <= 1){
					valor = campo.val().toString().split(".");
				}else{
					campo.val(campo.val().replace(/^\.|\.$/g,""));
					
					valor = campo.val().toString().split(".");
				}
				//------------------------------------------------------------------------
			}
			
			//Una vez separado--------------------------------------------------------
			if(campo.val().indexOf(decimal) > 0){
				decimales = 0 + decimal + valor[1];
				
				if(!cumpleStandar(decimales)){
					decimales = textoAnterior;
					
					fraccion = decimales.toString().split(decimal)
					
					campo.val(valor[0] + decimal + fraccion[1]);
					
					separadorMiles(campo);
					
				}else{ //todo en orden
					textoAnterior = decimales;//La funcion original llega hasta aqui
				}
			}
			//-------------------------------------------------------------------------
		}
	}
}

//**************************************************************************************
function separadorMiles(componente){
	//alert(decimal)

	if(componente.val().indexOf(decimal) > 0){
		//alert("con decimal")
	
		var componentes = componente.val().toString().split(decimal);
		
		if(region == "1"){			
			//----------------------------------VALIDACION DE Y CONSTRUCCION DE MILES
			//Separacion y validacion para la primer parte del arreglo (MILES)	
			var num = componentes[0].replace(/\,/g,"");
		
			//alert("Este es el numero: " + num)
		
			if(!isNaN(num)){
				//Validacion y separacion 
				num = num.toString().split("").reverse().join("").replace(/(?=\d*\,?)(\d{3})/g,"$1,");//Colocando separeadores de miles

				num = num.split("").reverse().join("").replace(/^[\,]/,"");//reemplazando puntos que se encuentren al final o principio de la linea

				
				//Estableciendo valor que se colocara en el campo de texto
				componente.val(num + decimal + componentes[1]);
			}
			else{
				//En caso de introducir otro valor que no sea un numero se toma el valor y se eliminan los caracteres que no sean numeros o puntos
				nom = componentes[0].replace(/[^\d\,]*/g,"")						
				
				componente.val(nom + decimal + componentes[1]);
			}
			//-------------------------------------------------------------------------------
		}
		
		if(region == "2"){			
			//------------------------------------------VALIDACION DE Y CONSTRUCCION DE MILES
			//Separacion y validacion para la primer parte del arreglo (MILES)	
			var num = componentes[0].replace(/\./g,"");
		
			if(!isNaN(num)){
				//Validacion y separacion 
				num = num.toString().split("").reverse().join("").replace(/(?=\d*\.?)(\d{3})/g,"$1.");//Colocando separeadores de miles

				num = num.split("").reverse().join("").replace(/^[\.]/,"");//reemplazando puntos que se encuentren al final o principio de la linea

				
				//Estableciendo valor que se colocara en el campo de texto
				componente.val(num + decimal + componentes[1]);
			} 
			else{
				//En caso de introducir otro valor que no sea un numero se toma el valor y se eliminan los caracteres que no sean numeros o puntos
				nom = componentes[0].replace(/[^\d\.]*/g,"")		
				
				componente.val(nom + decimal + componentes[1]);
			}
			//---------------------------------------------------------------------------------
		}			
	}			
		
	else{
		//alert("sin decimal")
	
		if(region == "1"){			
			//-------------------------------------------VALIDACION DE Y CONSTRUCCION DE MILES
			//Separacion y validacion para la primer parte del arreglo (MILES)	
			var num = componente.val().replace(/\,/g,"");
		
			//alert("Este es el numero: " + num)
		
			if(!isNaN(num)){
				//Validacion y separacion 
				num = num.toString().split("").reverse().join("").replace(/(?=\d*\,?)(\d{3})/g,"$1,");//Colocando separeadores de miles

				num = num.split("").reverse().join("").replace(/^[\,]/,"");//reemplazando puntos que se encuentren al final o principio de la linea

				
				//Estableciendo valor que se colocara en el campo de texto
				componente.val(num);
			}
			else{
				//En caso de introducir otro valor que no sea un numero se toma el valor y se eliminan los caracteres que no sean numeros o puntos
				componente.val(componente.val().replace(/[^\d\,]*/g,""));
			}
			//-------------------------------------------------------------------------------------
		}
		
		if(region == "2"){			
			//------------------------------------------------VALIDACION DE Y CONSTRUCCION DE MILES
			//Separacion y validacion para la primer parte del arreglo (MILES)	
			var num = componente.val().replace(/\./g,"");
		
			if(!isNaN(num)){
				//Validacion y separacion 
				num = num.toString().split("").reverse().join("").replace(/(?=\d*\.?)(\d{3})/g,"$1.");//Colocando separeadores de miles

				num = num.split("").reverse().join("").replace(/^[\.]/,"");//reemplazando puntos que se encuentren al final o principio de la linea
				
				//Estableciendo valor que se colocara en el campo de texto
				componente.val(num);
			}
			else{
				//En caso de introducir otro valor que no sea un numero se toma el valor y se eliminan los caracteres que no sean numeros o puntos
				componente.val(componente.val().replace(/[^\d\.]*/g,""));
			}
			//---------------------------------------------------------------------------------------
		}			
	}//fin else
}
//TERMINA COPIAR LINEAS DE CODIGO**********************************************************************